package br.unifor.ads.desphouse.business;

import java.sql.SQLException;
import java.util.List;

import br.unifor.ads.desphouse.dao.ParcelamentoDAO;
import br.unifor.ads.desphouse.entity.Parcelamento;
import br.unifor.ads.desphouse.exception.BusinessException;
import br.unifor.ads.desphouse.to.LancamentoTO;

/**
 * Classe de negocio para o parcelamento
 * 
 * @author Alex Girao
 */
public class ParcelamentoBusiness {
	
	private ParcelamentoDAO parcelamentoDAO;
	
	public ParcelamentoBusiness() {
		parcelamentoDAO = new ParcelamentoDAO();
	}
	
	public List<Parcelamento> buscarTodos() throws BusinessException{
		try {
			return parcelamentoDAO.buscarTodos();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public Parcelamento buscarPorCodigo(Long codigo) throws BusinessException{
		try {
			return parcelamentoDAO.buscarPorCodigo(codigo);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public Parcelamento salvar(Parcelamento parcelamento) throws BusinessException{
		try {
			if(parcelamento.getCodigo()==null){
				parcelamento = parcelamentoDAO.salvar(parcelamento);
			}else{
				parcelamentoDAO.atualizar(parcelamento);
			}
			return parcelamento;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public void excluirPorCodigo(Long codigo) throws BusinessException{
		try {
			parcelamentoDAO.excluirPorCodigo(codigo);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	/**
	 * Remove parcelas de um determinado Lancamento
	 * 
	 * @param codigoLancamento
	 */
	public void excluirParcelasLancamento(Long codigoLancamento) throws BusinessException{
		try {
			parcelamentoDAO.excluirParcelasLancamento(codigoLancamento);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public List<Parcelamento> emitirParcelas(LancamentoTO to){
		
		return null;
	}
	
}
